#include "HiloSimulador.h"


HiloSimulador::HiloSimulador(Conexion *c,Campo *ca,bool *cambios, Mutex *m):Thread(){
           
        	conexion=c;
			campo=ca;
	        mutex =m;
	        hayCambios=cambios;
			seguirCorriendo=true;
			velocidad=1000;	
			cantDias=1;
			
		   
}
void HiloSimulador::main(){
 
    std::string linea;
    std::vector<tAtribVariables> vector;
    
 	while(seguirCorriendo){ 
			 				 
				 *hayCambios=false;
				 /*Toma el tiempo de comienzo*/
				  comienzo = time( NULL );
				
		    /*MULTIFACTOR*/					 
			 std::vector<std::string>::iterator it;
		 {
			 	 
			 Locking lock(*mutex);			
			 for(it=vectorFactores.begin();it!=vectorFactores.end();it++){
			
				 	 /*Arma la consulta*/	
				 	std::stringstream ss;
				 	std::string s=(*it+" "); 
				    ss<<cantDias; 
				 	std::string aux; 
				 	ss>>aux;
    			 	s+=aux; 
				 	s+=" 20X15";
				
				 /*Pide factor climatico*/
				  conexion->enviarMensaje(s);
			
				 /*Recibe archivo XML*/
				  conexion->recibirMensaje(linea);
				 /*Parsea el xml */
				  ParserXML::leerXML(linea,vector);
								
				 
				  /*Calcula el crecimiento del campo*/
                  campo->actualizar((*it),vector,cantDias);
				  campo->actualizarMatrizPonderacion(vector);
				 
				   *hayCambios=true;
				 			
			    }/*Fin del for*/
			 	
				campo->ponderar();	 
				campo->resetMatrizPonderacion();	 									 
			}
				 /*toma tiempo 2  los resta y calcula cuanto hay que dormir*/				 
				 final = time( NULL );
				
				/*velocidad- (final-comienzo)*/
			     cantDias++;
				 
				 sleep(velocidad-(final-comienzo));
			}	
			 
			  /*Manda mjs de cierre conexion*/			
   			  conexion->enviarMensaje("FIN");
			  
			  
}

void HiloSimulador::stop(){
		seguirCorriendo=false;
	   *hayCambios=false;
}

void HiloSimulador:: subirVelocidad(){
		if(velocidad>250)
			velocidad=velocidad /2;
}

void HiloSimulador::bajarVelocidad(){velocidad =velocidad*2;}

void HiloSimulador::reiniciar(){

		cantDias=0;	
}
	
void HiloSimulador::cargarArchivoConfiguracion(){
	
	  archivo.open("configuracion.txt");   
  	  if( !archivo.good() )
				return;
	  
	  while(!archivo.eof()){
		  	  std::string aux;
		  	  archivo>>aux;
		  	  if(aux!=""){
		  			vectorFactores.push_back(aux);
		  	   	
		  	}  
	  }
	  archivo.close();
}
